MySQL删除数据表和删除表所有数据命令-TRUNCATE 和 DELETE

JiGeng

创建时间:2022年11月21日 03:31

编辑时间:2022年11月21日 03:39

TRUNCATE 和 DELETE 的使用与区别


***

#清空表数据(新建表,再完全删除旧表)

TRUNCATE TABLE tb_xxx;

#检查清空后是否有数据残留

SELECT * FROM tb_xxx;

为0



***删除表里所有数据

  1. DELETE from tb_xxx;

  2. 或delete 具体数据条。。。

  3. 删除后ID不连续问题(两种命令,建议第二个):

    1. alter table tablename auto_increment = 1;

    2. alter table tablename  ADD id INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;






TRUNCATE 和 DELETE 的区别


从逻辑上说,TRUNCATE 语句与 DELETE 语句作用相同,但是在某些情况下,两者在使用上有所区别。


DELETE 是 DML 类型的语句;TRUNCATE 是 DDL 类型的语句。它们都用来清空表中的数据。


DELETE 是逐行一条一条删除记录的;TRUNCATE 则是直接删除原来的表,再重新创建一个一模一样的新表,而不是逐行删除表中的数据,执行数据比 DELETE 快。因此需要删除表中全部的数据行时,尽量使用 TRUNCATE 语句, 可以缩短执行时间。


DELETE 删除数据后,配合事件回滚可以找回数据;TRUNCATE 不支持事务的回滚,数据删除后无法找回。


DELETE 删除数据后,系统不会重新设置自增字段的计数器;TRUNCATE 清空表记录后,系统会重新设置自增字段的计数器。


DELETE 的使用范围更广,因为它可以通过 WHERE 子句指定条件来删除部分数据;而 TRUNCATE 不支持 WHERE 子句,只能删除整体。


DELETE 会返回删除数据的行数,但是 TRUNCATE 只会返回 0,没有任何意义。